import { IsEnum, IsNotEmpty, IsString, MaxLength, IsNumberString, IsJSON } from 'class-validator';

/**
 * ? 创建商品 dto
 */
export class CreateGoodsDto {
  @IsNumberString({}, { message: '请输入正确的商品ID格式' })
  @IsNotEmpty({ message: '商品ID不能为空' })
  id: number;

  @IsString()
  @IsNotEmpty({ message: '商品名称不能为空' })
  @MaxLength(12, { message: '商品名称长度不能大于12位' })
  name: string;

  @IsString()
  @IsNotEmpty({ message: '商品描述不能为空' })
  @MaxLength(255, { message: '商品描述长度不能大于255位' })
  description: string;

  @IsString()
  @IsNotEmpty({ message: '商品主图不能为空' })
  thump: string;

  @IsNumberString({}, { message: '请输入正确的商品价格格式' })
  @IsNotEmpty({ message: '商品价格不能为空' })
  price: number;

  @IsNumberString({}, { message: '请输入正确的商品旧价格格式' })
  @IsNotEmpty({ message: '商品旧价格不能为空' })
  old_price?: number;

  @IsNumberString({}, { message: '请输入正确的商品库存格式' })
  @IsNotEmpty({ message: '商品库存不能为空' })
  stock: number;

  @IsString()
  @IsNotEmpty({ message: '商品轮播图不能为空' })
  images: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品状态格式' })
  @IsNotEmpty({ message: '商品状态不能为空' })
  status?: string;

  @IsNumberString({}, { message: '请输入正确的商品分类ID格式' })
  @IsNotEmpty({ message: '商品分类ID不能为空' })
  category_id: number;

  @IsNumberString({}, { message: '请输入正确的商品销量格式' })
  @IsNotEmpty({ message: '商品销量不能为空' })
  sales?: number;

  @IsNumberString({}, { message: '请输入正确的商品虚拟销量格式' })
  @IsNotEmpty({ message: '商品虚拟销量不能为空' })
  v_sales?: number;

  @IsNumberString({}, { message: '请输入正确的商品评论数格式' })
  @IsNotEmpty({ message: '商品评论数不能为空' })
  comments?: number;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否热卖格式' })
  @IsNotEmpty({ message: '商品是否热卖不能为空' })
  is_hot?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否推荐格式' })
  @IsNotEmpty({ message: '商品是否推荐不能为空' })
  is_recommend?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否新商品格式' })
  @IsNotEmpty({ message: '商品是否新商品不能为空' })
  is_new?: string;
}

/**
 * ? 更新商品 dto
 */
export class UpdateGoodsDto {
  @IsNumberString({}, { message: '请输入正确的商品ID格式' })
  @IsNotEmpty({ message: '商品ID不能为空' })
  id: number;

  @IsString()
  @IsNotEmpty({ message: '商品名称不能为空' })
  @MaxLength(12, { message: '商品名称长度不能大于12位' })
  name?: string;

  @IsString()
  @IsNotEmpty({ message: '商品描述不能为空' })
  @MaxLength(255, { message: '商品描述长度不能大于255位' })
  description?: string;

  @IsNumberString({}, { message: '请输入正确的商品价格格式' })
  @IsNotEmpty({ message: '商品价格不能为空' })
  price?: number;

  @IsNumberString({}, { message: '请输入正确的商品旧价格格式' })
  @IsNotEmpty({ message: '商品旧价格不能为空' })
  old_price?: number;

  @IsNumberString({}, { message: '请输入正确的商品库存格式' })
  @IsNotEmpty({ message: '商品库存不能为空' })
  stock?: number;

  @IsString()
  @IsNotEmpty({ message: '商品主图不能为空' })
  thump?: string;

  @IsString()
  @IsNotEmpty({ message: '商品图片不能为空' })
  images?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品状态格式' })
  @IsNotEmpty({ message: '商品状态不能为空' })
  status?: string;

  @IsNumberString({}, { message: '请输入正确的商品分类ID格式' })
  @IsNotEmpty({ message: '商品分类ID不能为空' })
  category_id?: number;

  @IsNumberString({}, { message: '请输入正确的商品销量格式' })
  @IsNotEmpty({ message: '商品销量不能为空' })
  sales?: number;

  @IsNumberString({}, { message: '请输入正确的商品虚拟销量格式' })
  @IsNotEmpty({ message: '商品虚拟销量不能为空' })
  v_sales?: number;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否热卖格式' })
  @IsNotEmpty({ message: '商品是否热卖不能为空' })
  is_hot?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否推荐格式' })
  @IsNotEmpty({ message: '商品是否推荐不能为空' })
  is_recommend?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否新商品格式' })
  @IsNotEmpty({ message: '商品是否新商品不能为空' })
  is_new?: string;
}

/**
 * ? 查询商品详情 dto
 */
export class GoodsQueryDto {
  @IsNumberString({}, { message: '请输入正确的商品ID格式' })
  @IsNotEmpty({ message: '商品ID不能为空' })
  id?: number;

  @IsString()
  @IsNotEmpty({ message: '商品名称不能为空' })
  @MaxLength(12, { message: '商品名称长度不能大于12位' })
  name?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否热卖格式' })
  @IsNotEmpty({ message: '商品是否热卖不能为空' })
  is_hot?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否推荐格式' })
  @IsNotEmpty({ message: '商品是否推荐不能为空' })
  is_recommend?: string;

  @IsEnum(['0', '1'], { message: '请输入正确的商品是否新商品格式' })
  @IsNotEmpty({ message: '商品是否新商品不能为空' })
  is_new?: string;

  @IsNumberString({}, { message: '请输入正确的商品分类ID格式' })
  @IsNotEmpty({ message: '商品分类ID不能为空' })
  category_id?: number;
}